[Ajuda] Matriz com ponteiros [RESOLVIDO]

1. [Ajuda] Matriz com ponteiros [RESOLVIDO]

Gustavo
rs23

(usa Ubuntu)

Enviado em 22/12/2010 - 14:46h

Boa ntarde,

Estou tentando criar uma matriz usando ponteiros e esta dando erro nesta linha:

vetor= malloc( linhas * colunas * sizeof(int) );

segue o código do programa

Código:

#include <stdio.h>
#include <stdlib.h>
int main(void)
{
int linhas, colunas, i;
int *vetor, **matriz;

printf("\nDigite o numero de linhas e colunas: ");
scanf("%d,%d",&linhas,&colunas);

vetor= malloc( linhas * colunas * sizeof(int) );
*matriz= malloc( linhas * sizeof(int) );

for(i=0;i<linhas;i++)
matriz[i]= &vetor[ i * colunas];

//mostrar a matriz
for (linhas=0; linhas<3; linhas++)
{
for (colunas=0; colunas<3; colunas++)
{
printf("%d", mat[linhas][colunas]);
}
printf("\n");
}

system("pause");

free(vetor);
free(matriz);
return 0;
}

Alguém poderia me ajudar?


  


2. MELHOR RESPOSTA

Samuel Leonardo
SamL

(usa XUbuntu)

Enviado em 22/12/2010 - 20:13h

"*matriz= (int *) malloc( (linhas) * (sizeof(int)) );"

Não foi bem assim que expliquei :P

Um exemplo prático:
#include <stdio.h>
#include <stdlib.h>

int main(void)
{
int linhas, colunas, i;
int **matriz;

do {
printf("\nDigite o numero de linhas: ");
scanf("%d",&linhas);
} while (linhas < 1);

do {
printf("\nDigite o numero de colunas: ");
scanf("%d",&colunas);
} while (colunas < 1);

// Aloca as linhas, onde cada uma é um "vetor"
matriz = (int **) malloc((linhas) * (sizeof(int *)));

// Aloca cada "coluna", ou melhor, aloca cada vetor com o tamanho de colunas
for(i = 0; i < linhas; i++)
matriz[i] = (int *) malloc(colunas * (sizeof(int)));

/*
Depois de alocada pode usar a matriz normalmente
*/


// Quando não precisar mais da matriz, então libere a memória alocada
for(i = 0; i < linhas; i++)
free(matriz[i]); // libera cada linha

free(matriz); // libera a "matriz" alocada, aqui é liberado os vetores(linhas) da matriz

return 0;
}


3. Re: [Ajuda] Matriz com ponteiros [RESOLVIDO]

Ezequias Rocha
Ezequias Rocha

(usa Ubuntu)

Enviado em 22/12/2010 - 15:50h

Substitua por

vetor= (int *) malloc( (linhas) * (colunas) * (sizeof(int)) );
*matriz= (int *) malloc( (linhas) * (sizeof(int)) );


e veja o que ocorre (poste os resultados aqui, por favor).


Embraces!


4. Re: [Ajuda] Matriz com ponteiros [RESOLVIDO]

Gustavo
rs23

(usa Ubuntu)

Enviado em 22/12/2010 - 17:54h

Alterei o código

e alterei também a seguinte linha:

printf("%d", matriz[linhas][colunas]);

no entanto o programa compila e roda mas na hora em que eu digito o número de linhas e colunas
da matriz o programa para de funcionar acusando um erro de tempo de execução.

O que esta havendo?



5. Re: [Ajuda] Matriz com ponteiros [RESOLVIDO]

Gustavo
rs23

(usa Ubuntu)

Enviado em 22/12/2010 - 18:49h

Sam L.

Fiz as alterações conforme você especificou e continua dando erro de execução

segue o código modificado:

#include <stdio.h>
#include <malloc.h>
#include <stdlib.h>
int main(void)
{
int linhas, colunas, i;
int **matriz;

printf("\nDigite o numero de linhas: ");
scanf("%d",&linhas);
printf("\nDigite o numero de colunas: ");
scanf("%d",&colunas);

// vetor= (int *) malloc( (linhas) * (colunas) * (sizeof(int)) );
*matriz= (int *) malloc( (linhas) * (sizeof(int)) );

for(i=0;i<colunas;i++)
*matriz= (int *) malloc( (colunas) * (sizeof(int)) );

//mostrar a matriz
for (linhas=0; linhas<3; linhas++)
{
for (colunas=0; colunas<3; colunas++)
{
printf("%d", matriz[linhas][colunas]);
}
printf("\n");
}

free(linhas); /*faz a liberação da memória alocada para as linhas*/
free(matriz); /*faz a liberação da memória alocada*/

system("pause");
return 0;
}


6. Re: [Ajuda] Matriz com ponteiros [RESOLVIDO]

Gustavo
rs23

(usa Ubuntu)

Enviado em 22/12/2010 - 20:25h

Sam L.

Tentei incrementar o código para entrar com os valores na matriz e o programa
apresentou erro de execução

segue o que eu implementei

#include <stdio.h>
#include <stdlib.h>

int main(void)
{
int linhas, colunas, i,j;
int **matriz;

do {
printf("\nDigite o numero de linhas: ");
scanf("%d",&linhas);
} while (linhas < 1);

do {
printf("\nDigite o numero de colunas: ");
scanf("%d",&colunas);
} while (colunas < 1);

// Aloca as linhas, onde cada uma é um "vetor"
matriz = (int **) malloc((linhas) * (sizeof(int *)));

// Aloca cada "coluna", ou melhor, aloca cada vetor com o tamanho de colunas
for(i = 0; i < linhas; i++)
matriz[i] = (int *) malloc(colunas * (sizeof(int)));

/*
Depois de alocada pode usar a matriz normalmente
*/

/*
Incrementei a parte abaixo
*/
//processar matriz
for (i=0; i<linhas; i++)
{
for (j=0; colunas<3; j++)
{
printf("Digite um valor: ");
scanf("%d%d", &matriz[linhas][colunas]);
}
}

//mostrar a matriz
for (i=0; i<linhas; i++)
{
for (j=0; j<colunas; j++)
{
printf("%d", matriz[linhas][colunas]);
}
printf("\n");
}

// Quando não precisar mais da matriz, então libere a memória alocada
for(i = 0; i < linhas; i++)
free(matriz[i]); // libera cada linha

free(matriz); // libera a "matriz" alocada, aqui é liberado os vetores(linhas) da matriz

system("pause");
return 0;
}



7. Re: [Ajuda] Matriz com ponteiros [RESOLVIDO]

Gustavo
rs23

(usa Ubuntu)

Enviado em 24/12/2010 - 01:18h

problema resolvido

Segue o código para estudo

#include <stdio.h>
#include <stdlib.h>

int main(void)
{
int linhas, colunas, i,j;
int **matriz;

printf("\nDigite o numero de linhas: ");
scanf("%d",&linhas);
printf("\nDigite o numero de colunas: ");
scanf("%d",&colunas);

matriz = (int **) malloc((linhas) * (sizeof(int *)));

for(i = 0; i < linhas; i++)

matriz[i] = (int *) malloc(colunas * (sizeof(int)));

//processar matriz
for (i=0; i<linhas; i++)
{
for (j=0; j<colunas; j++)
{
printf("Digite um valor: ");
scanf("%d", &matriz[i][j]);
}
}

//mostrar a matriz
for (i=0; i<linhas; i++)
{
for (j=0; j<colunas; j++)
{
printf("%d", matriz[i][j]);
}
printf("\n");
}

for(i = 0; i < linhas; i++)

free(matriz[i]);

free(matriz);

system("pause");
return 0;

}






Patrocínio

Site hospedado pelo provedor RedeHost.
Linux banner

Destaques

Artigos

Dicas

Tópicos

Top 10 do mês

Scripts